Modul 1 : Pengenalan R

Dalam praktikum MAP II (Analitika Perkotaan) perangkat lunak yang digunakan adalah R dan RStudio. R merupakan bahasa pemrograman yang terkenal dan software open-source yang gratis, digunakan untuk analisis statistik dan data. Ini memiliki kemampuan yang sangat baik dalam komputasi statistik tingkat tinggi. Dengan lebih dari 18.000 paket data science tersedia (sampai September 2022), termasuk yang bersifat umum dan yang spesifik, R didukung oleh sebuah komunitas online yang sangat aktif dan suportif serta dapat beroperasi di berbagai sistem operasi. RStudio merupakan alat esensial bagi siapa saja yang menggunakan bahasa pemrograman R dalam pekerjaannya. Ini membantu dalam proses analisis data, mulai dari impor dan akses data, transformasi, eksplorasi, pembuatan plot, hingga pemodelan data, serta digunakan dalam pembelajaran mesin untuk melakukan prediksi berdasarkan data tersebut.

Pengenalan Dasar R Studio

Apa bedanya R dan R Studio?

Secara sederhana, R seperti mesin mobil, sedangkan RStudio seperti dasbor mobil seperti yang diilustrasikan pada gambar di bawah.

Lebih tepatnya, R adalah bahasa pemrograman yang menjalankan komputasi, sedangkan RStudio adalah integrated development environment (IDE) yang menyediakan antarmuka dengan menambahkan banyak fitur dan alat yang nyaman. Jadi, seperti halnya memiliki akses ke speedometer, kaca spion, dan sistem navigasi yang membuat mengemudi jauh lebih mudah, menggunakan antarmuka RStudio juga membuat penggunaan R jauh lebih mudah.

R Studio Interface

Buka aplikasi RStudio yang akan otomatis juga menjalankan software atau kernel R. Berikut adalah tampilan aplikasinya.

Secara umum, halaman ini bisa dibagi menjadi 3 bagian utama:

  • Left-area: Tabs Console, Terminal, dan Background Jobs

  • Top-right area: Tabs Environment, History, Connections, dan Tutorial

  • Bottom-right area: Tabs Files, Plots, Packages, Help, Viewer, and Presentation

Memulai Project Baru

Memulai project baru penting untuk mengorganisasi file dan data yang digunakan seperti R script, plot, gambar, dan lain-lain.

Buat proyek baru dengan membuka Filetab di RStudio dan pilih New Project.... Kemudian tentukan apakah Anda ingin membuat proyek di direktori baru, atau di direktori yang sudah ada. Di sini kita pilih New Directory:

terdapat beberapa pilihan tipe project yang dapat dibuat. dalam kasus ini kita memilih New Project

Selanjutnya, kita beri nama pada proyek kita. Create project as a subdirectory of: menunjukkan lokasi folder tersebut di komputer. Jika kita setuju dengan lokasi tersebut, pilih Create Project, jika tidak, pilih Browse dan pilih lokasi di komputer tempat folder proyek ini akan berada. Dalam kasus ini, silakan simpan folder directory sesuai dengan cara masing-masing dalam mengatur folder praktikum. misal:

D:/Semester 3/SWK/Praktikum 0

sangat disarankan untuk memisahkan folder setiap praktikum agar memudahkan mengerjakan dan menemukan data praktikum pada praktikum-praktikum selanjutnya.

Sekarang di RStudio kita melihat nama proyek tertera di pojok kanan atas layar. Kita juga melihat file .Rproj di tab Files. File apa pun yang kita tambahkan atau buat di dalam proyek ini akan muncul di tab Files.

Kalian dapat menutup project pada menu file - Close Project

Console

Pada tab ini, kita bisa melihat informasi mengenai versi R yang digunakan dan juga beberapa perintah dasar yang dapat dicoba. Pada akhir deskripsi tersebut, kita dapat mengetikkan kode R kita, tekan Enter, dan dapatkan hasilnya di bawah baris kode (misalnya, coba jalankan 2*2 dan lihat apa yang terjadi). Dengan console ini kita bisa melakukan apa saja yang kita lakukan di program R lainnya, misalnya:

  • Install dan load R Packages (baca lebih lanjut terkait R Packages Tutorial: How to Download & Install R Packages | DataCamp)

  • Melakukan operasi matematika sederhana atau kompleks

  • Menetapkan hasil operasi ke sebuah variabel

  • Mengimpor data

  • Membuat jenis objek R yang umum, seperti vektor, matriks, atau bingkai data

  • Mengeksplorasi data

  • Analisis statistik

  • Membangun visualisasi data

Namun, ketika kita menjalankan kode secara langsung di console, kode tersebut tidak disimpan untuk direproduksi lebih lanjut. Jika kita perlu (dan biasanya memang perlu) menulis kode yang dapat direproduksi untuk menyelesaikan tugas tertentu, kita harus mencatat dan menyimpannya secara teratur dalam script file, bukan di console.

Kita akan segera menjelajahi cara menulis script file. Untuk saat ini, mari kita ingat bahwa Anda sebaiknya menggunakan console untuk menguji kode dan menginstal paket-paket R karena paket-paket tersebut hanya perlu diinstal satu kali.

Environment

Setiap kali kita mendefinisikan variabel baru atau menetapkan ulang variabel yang sudah ada di RStudio, variabel tersebut akan disimpan sebagai objek di workspace dan ditampilkan, bersama dengan nilainya, di tab Environment di area kanan atas jendela RStudio. Coba jalankan : greeting <- “Hello World!” di console dan lihat apa yang terjadi pada tab Environment.

Hal ini juga berkaitan dengan objek yang lebih kompleks seperti dataframe. Ketika kita mengimpor data sebagai dataframe (atau membuat dataframe dari awal), kita melihat di workspace tidak hanya nama objek baru tetapi juga nilai dan tipe data dari setiap kolom. Selain itu, kita dapat menampilkan lebih banyak detail tentang setiap objek, seperti panjang dan ukuran memorinya.

Pada contoh di bawah ini, kita membuat dua variabel di konsol:

greeting <- "Hello, World!"

my_vector <- c(1, 2, 3, 4)

Perhatikan bagaimana variabel-variabel tersebut ditampilkan pada tab Environment:

Kita dapat mengubah cara menampilkan variabel kita dari List ke Grid di sudut kanan atas tab. Perhatikan, bahwa sekarang kita juga bisa melihat panjang dan ukuran setiap objek.
Dalam mode tampilan Grid, kotak akan muncul di sebelah kiri setiap variabel. Kita dapat mencentang salah satu kotak tersebut dan mengklik ikon Broom (sapu berwarna coklat) untuk menghapus objek yang sesuai dari workspace. Jika kita mencentang kotak di sebelah kiri kolom Name dan mengklik ikon Broom, atau jika kita hanya mengklik ikon ini pada mode tampilan sebelumnya (List), kita akan membersihkan workspace kita dan menghapus semua variabel darinya.

Tabs penting lainnya

  • Terminal - untuk menjalankan perintah dari terminal

  • History - untuk melacak riwayat semua operasi yang dilakukan selama sesi RStudio saat ini

  • Files - untuk melihat struktur folder kerja, mengatur ulang folder kerja, menavigasi antar folder, dll.

  • Plots - untuk melihat pratinjau dan mengekspor visualisasi data yang dibuat

  • Packages- untuk memeriksa package apa saja yang dimuat dan memuat atau membongkar package (dengan menyalakan/mematikan kotak di sebelah kiri nama package)

Operasi-operasi lain pada R studio

Selanjutnya, kita akan membahas tindakan apa saja yang bisa kita lakukan di RStudio untuk tujuan analisis data. Sebenarnya, semua operasi yang akan kita bahas tidak hanya terkait dengan RStudio, tetapi lebih pada penggunaan R secara umum, dalam IDE apa pun. 

Oleh karena itu, kita tidak akan membahas secara rinci semua detail teknis dari operasi-operasi tersebut. Sebaliknya, kita akan melihat beberapa tugas umum, implementasi praktisnya di R (contoh kode), dan pendekatan alternatif (jika ada) untuk tugas-tugas tersebut di RStudio.

Salin-tempel contoh-contoh di bawah ini ke dalam console RStudio dan jelajahi hasilnya. Pertimbangkan untuk mencoba pendekatan umum dan alternatif (khusus RStudio).

Instalasi R Package

Syntax:

install.packages("package_name")

Contoh:

install.packages("tidyverse")

Di RStudio:

  • Ingatlah untuk menginstal semua package di console, bukan di script file, karena paket-paket tersebut hanya perlu diinstal di hard disk komputer satu kali saja.

  • Anda dapat menginstal package langsung dari interface RStudio: buka tab Packages (bagian kiri bawah), klik Install dan pilih package yang diperlukan dari CRAN yang dipisahkan dengan spasi atau koma, seperti berikut:

Loading R Package

Syntax:

library(package_name)

Contoh:

library(tidyverse)

Perhatikan bahwa tanda kutip tidak digunakan untuk memuat package.

Di RStudio:

  • Muat semua package yang diperlukan dalam script file, bukan di console.

  • Memuat/membongkar package terinstal atau package sistem dapat dilakukan dengan mencari dan mencentang/menghapus centang package-package tersebut pada tab Package. Perhatikan bahwa beberapa package tidak dapat dibongkar jika diimpor oleh package lain.

Mengecek R Package yang terpasang

Jalankan di konsol search() untuk mendapatkan daftar semua paket yang dimuat.

Di RStudio: buka tab Packages, cari paket tertentu, dan cek centang kotak di sebelah kiri nama package.

Melihat keterangan/dokumentasi R Package atau R Object

Untuk mendapatkan “help” atau semacam dokumentasi pada paket yang terinstal dan dimuat, atau fungsi dari paket yang terinstal dan dimuat, atau objek R bawaan lainnya (seperti kumpulan data yang telah dimuat sebelumnya), gunakan salah satu dari sintaks berikut:

help(package_or_function_name)

atau

help("package_or_function_name")

atau

?package_or_function_name

Catatan: kita perlu memasukkan nama fungsi ke fungsi bantuan tanpa tanda kurung.

Tab Help akan dibuka dengan dokumentasi package atau objek. Jika kita membuka sebuah package, maka kita akan mendapatkan daftar semua fungsi dan tautan ke dokumentasi untuk masing-masing fungsi.

Sebagai contoh, jalankan perintah berikut ini pada konsol (setelah memastikan bahwa paket readr dan dplyr telah terinstal dan dimuat):

help("read.csv")

?readr

help(help)

help('CO2')

Di RStudio: cari dan klik nama paket yang diinginkan (meskipun tidak dimuat) pada tab Packages dan lihat hasilnya pada tab Help.

Import data

Contoh:

world_population <- read.csv("world_population.csv")

(Untuk menjalankan kode di atas, pertama-tama, unduh Dataset Populasi Dunia yang tersedia untuk umum dari Kaggle dan ekstrak ke dalam folder yang sama dengan tempat Anda menyimpan R project).

Hasil dari menjalankan kode di atas akan menjadi sebuah dataframe R dalam folder kerja Anda.

Di RStudio:

  • File - Import Dataset

atau

  • Klik Import Dataset pada tab Environment:

Kemudian pilih From Text (base), navigasikan ke folder yang tepat, pilih file yang akan diimpor, isi atau centang bidang Name, Heading, Separator, dan Decimal pada pop-up window, preview dataset, dan klik Import:

Kalian sekarang dapat menemukan dan menjelajahi set data yang diimpor di tab Environment dan di spreadsheet yang dibuka di tab baru:

Akses Built-in dataset di R

Untuk melihat daftar lengkap dataset sampel yang tersedia yang dimuat sebelumnya di R, termasuk nama dan deskripsi singkatnya, jalankan kode berikut ini di console:

data()

Anda dapat mengambil salah satu nama yang muncul dan menggunakan masing-masing nama tersebut sebagai variabel (berisi sebuah dataframe) untuk bekerja dan melatih kemampuan Anda dalam R.


Jika Anda membutuhkan informasi lebih lanjut tentang dataset yang telah dimuat sebelumnya, jalankan fungsi help() pada dataset tersebut, misalnya,help(CO2).

Data Wragling dan Analisis Sederhana di R Studio

Seperti pada IDE R lainnya, di RStudio, kita dapat mengakses, memanipulasi, mentransformasi, menganalisis, dan memodelkan data dalam R. Di bawah ini adalah beberapa contoh operasi standar yang dilakukan pada dataset bawaan CO2 :

#menampilkan 15 row pertama
head(CO2,15)
##    Plant   Type  Treatment conc uptake
## 1    Qn1 Quebec nonchilled   95   16.0
## 2    Qn1 Quebec nonchilled  175   30.4
## 3    Qn1 Quebec nonchilled  250   34.8
## 4    Qn1 Quebec nonchilled  350   37.2
## 5    Qn1 Quebec nonchilled  500   35.3
## 6    Qn1 Quebec nonchilled  675   39.2
## 7    Qn1 Quebec nonchilled 1000   39.7
## 8    Qn2 Quebec nonchilled   95   13.6
## 9    Qn2 Quebec nonchilled  175   27.3
## 10   Qn2 Quebec nonchilled  250   37.1
## 11   Qn2 Quebec nonchilled  350   41.8
## 12   Qn2 Quebec nonchilled  500   40.6
## 13   Qn2 Quebec nonchilled  675   41.4
## 14   Qn2 Quebec nonchilled 1000   44.3
## 15   Qn3 Quebec nonchilled   95   16.2
#menampilkan 10 row terakhir
tail(CO2,10)
##    Plant        Type Treatment conc uptake
## 75   Mc2 Mississippi   chilled  500   12.5
## 76   Mc2 Mississippi   chilled  675   13.7
## 77   Mc2 Mississippi   chilled 1000   14.4
## 78   Mc3 Mississippi   chilled   95   10.6
## 79   Mc3 Mississippi   chilled  175   18.0
## 80   Mc3 Mississippi   chilled  250   17.9
## 81   Mc3 Mississippi   chilled  350   17.9
## 82   Mc3 Mississippi   chilled  500   17.9
## 83   Mc3 Mississippi   chilled  675   18.9
## 84   Mc3 Mississippi   chilled 1000   19.9
#menampilkan nama kolom
colnames(CO2)
## [1] "Plant"     "Type"      "Treatment" "conc"      "uptake"
#melihat jumlah row dan kolom
dim(CO2)
## [1] 84  5
#menampilkan struktur data
str(CO2)
## Classes 'nfnGroupedData', 'nfGroupedData', 'groupedData' and 'data.frame':   84 obs. of  5 variables:
##  $ Plant    : Ord.factor w/ 12 levels "Qn1"<"Qn2"<"Qn3"<..: 1 1 1 1 1 1 1 2 2 2 ...
##  $ Type     : Factor w/ 2 levels "Quebec","Mississippi": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Treatment: Factor w/ 2 levels "nonchilled","chilled": 1 1 1 1 1 1 1 1 1 1 ...
##  $ conc     : num  95 175 250 350 500 675 1000 95 175 250 ...
##  $ uptake   : num  16 30.4 34.8 37.2 35.3 39.2 39.7 13.6 27.3 37.1 ...
##  - attr(*, "formula")=Class 'formula'  language uptake ~ conc | Plant
##   .. ..- attr(*, ".Environment")=<environment: R_EmptyEnv> 
##  - attr(*, "outer")=Class 'formula'  language ~Treatment * Type
##   .. ..- attr(*, ".Environment")=<environment: R_EmptyEnv> 
##  - attr(*, "labels")=List of 2
##   ..$ x: chr "Ambient carbon dioxide concentration"
##   ..$ y: chr "CO2 uptake rate"
##  - attr(*, "units")=List of 2
##   ..$ x: chr "(uL/L)"
##   ..$ y: chr "(umol/m^2 s)"
#statistik summary CO2 untuk setiap kolom
summary(CO2)
##      Plant             Type         Treatment       conc          uptake     
##  Qn1    : 7   Quebec     :42   nonchilled:42   Min.   :  95   Min.   : 7.70  
##  Qn2    : 7   Mississippi:42   chilled   :42   1st Qu.: 175   1st Qu.:17.90  
##  Qn3    : 7                                    Median : 350   Median :28.30  
##  Qc1    : 7                                    Mean   : 435   Mean   :27.21  
##  Qc3    : 7                                    3rd Qu.: 675   3rd Qu.:37.12  
##  Qc2    : 7                                    Max.   :1000   Max.   :45.50  
##  (Other):42
#statisic summary kolom/variabel uptake
summary(CO2$uptake)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    7.70   17.90   28.30   27.21   37.12   45.50
#median variabel uptake
median(CO2$uptake)
## [1] 28.3
#menampilkan kelas data variabel uptake
class(CO2$uptake)
## [1] "numeric"
#melihat nilai unik dari variabel treatment
unique(CO2$Treatment)
## [1] nonchilled chilled   
## Levels: nonchilled chilled
#menampilkan subset row/beberapa row dengan nilai conc paling kecil
subset(CO2, conc == min(CO2$conc))
##    Plant        Type  Treatment conc uptake
## 1    Qn1      Quebec nonchilled   95   16.0
## 8    Qn2      Quebec nonchilled   95   13.6
## 15   Qn3      Quebec nonchilled   95   16.2
## 22   Qc1      Quebec    chilled   95   14.2
## 29   Qc2      Quebec    chilled   95    9.3
## 36   Qc3      Quebec    chilled   95   15.1
## 43   Mn1 Mississippi nonchilled   95   10.6
## 50   Mn2 Mississippi nonchilled   95   12.0
## 57   Mn3 Mississippi nonchilled   95   11.3
## 64   Mc1 Mississippi    chilled   95   10.5
## 71   Mc2 Mississippi    chilled   95    7.7
## 78   Mc3 Mississippi    chilled   95   10.6

Coba jalankan satu per satu di RStudio dan amati hasilnya.

*asisten dapat mencontohkan beberapa dari code di atas saat praktikum

Plotting data di R Studio

Seperti pada IDE R lainnya, di RStudio, kita dapat memplot data. Di bawah ini adalah beberapa contoh pembuatan plot sederhana untuk dataset bawaan CO2 dan Orange . Pada kedua kasus tersebut, plot yang dihasilkan muncul pada tab Plots dan dapat diekspor menggunakan tombol Export pada tab tersebut:

  • Membuat histogram

    hist(CO2$uptake)

  • Membuat scatter plot

    plot(Orange$age, Orange$circumference)

    Kita dapat menyetel beberapa parameter yang tersedia untuk fungsi plot() dasar untuk menambahkan beberapa estetika pada plot terakhir:

    plot(Orange$age, Orange$circumference, 
      xlab="Age", ylab="Circumference", 
      main="Circumference vs. Age", 
      col="blue", pch=16)

Membuat data from scratch

Sekali lagi, dalam hal ini, RStudio tidak berbeda dengan IDE R lainnya.

Untuk membuat vektor:

oceans <- c("Arctic", "Atlantic", "Indian", "Pacific", "Southern")

avg_depth <- c(1.2, 3.65, 3.74, 3.97, 3.27)

Untuk membuat dataframe:

oceans_depth <- data.frame(oceans, avg_depth)

Print out hasil:

print(oceans_depth)

Vektor dan bingkai data yang dihasilkan, juga muncul pada tab Environment di RStudio:

Missing data

Beberapa data statistik mungkin memiliki row/variabel dengan missing data. Berikut merupakan langkah yang dapat dilakukan ketika harus mengolah dataset yang memiliki missing value. Dalam kasus ini kita akan memakai dataset airquality

data(airquality)
head(airquality)
##   Ozone Solar.R Wind Temp Month Day
## 1    41     190  7.4   67     5   1
## 2    36     118  8.0   72     5   2
## 3    12     149 12.6   74     5   3
## 4    18     313 11.5   62     5   4
## 5    NA      NA 14.3   56     5   5
## 6    28      NA 14.9   66     5   6

missing value ditunjukkan dengan nilai N/A pada row

  • mengecek dan menghitung missing value

    is.na(airquality)
    ##        Ozone Solar.R  Wind  Temp Month   Day
    ##   [1,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##   [2,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##   [3,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##   [4,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##   [5,]  TRUE    TRUE FALSE FALSE FALSE FALSE
    ##   [6,] FALSE    TRUE FALSE FALSE FALSE FALSE
    ##   [7,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##   [8,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##   [9,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [10,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [11,] FALSE    TRUE FALSE FALSE FALSE FALSE
    ##  [12,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [13,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [14,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [15,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [16,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [17,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [18,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [19,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [20,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [21,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [22,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [23,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [24,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [25,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [26,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [27,]  TRUE    TRUE FALSE FALSE FALSE FALSE
    ##  [28,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [29,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [30,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [31,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [32,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [33,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [34,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [35,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [36,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [37,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [38,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [39,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [40,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [41,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [42,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [43,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [44,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [45,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [46,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [47,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [48,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [49,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [50,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [51,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [52,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [53,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [54,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [55,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [56,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [57,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [58,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [59,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [60,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [61,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [62,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [63,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [64,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [65,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [66,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [67,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [68,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [69,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [70,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [71,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [72,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [73,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [74,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [75,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [76,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [77,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [78,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [79,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [80,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [81,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [82,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [83,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [84,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ##  [85,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [86,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [87,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [88,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [89,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [90,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [91,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [92,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [93,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [94,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [95,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ##  [96,] FALSE    TRUE FALSE FALSE FALSE FALSE
    ##  [97,] FALSE    TRUE FALSE FALSE FALSE FALSE
    ##  [98,] FALSE    TRUE FALSE FALSE FALSE FALSE
    ##  [99,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [100,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [101,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [102,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ## [103,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ## [104,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [105,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [106,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [107,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ## [108,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [109,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [110,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [111,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [112,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [113,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [114,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [115,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ## [116,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [117,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [118,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [119,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ## [120,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [121,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [122,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [123,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [124,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [125,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [126,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [127,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [128,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [129,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [130,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [131,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [132,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [133,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [134,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [135,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [136,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [137,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [138,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [139,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [140,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [141,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [142,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [143,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [144,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [145,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [146,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [147,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [148,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [149,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [150,]  TRUE   FALSE FALSE FALSE FALSE FALSE
    ## [151,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [152,] FALSE   FALSE FALSE FALSE FALSE FALSE
    ## [153,] FALSE   FALSE FALSE FALSE FALSE FALSE
    #nilai TRUE menunjukkan bahwa terdapat missing value
    #menghitung missing value pada variabel Ozone
    sum(is.na(airquality$Ozone))
    ## [1] 37
  • Melihat row yang memiliki missing value

    rows_with_na <- airquality[!complete.cases(airquality), ]
    print(rows_with_na)
    ##     Ozone Solar.R Wind Temp Month Day
    ## 5      NA      NA 14.3   56     5   5
    ## 6      28      NA 14.9   66     5   6
    ## 10     NA     194  8.6   69     5  10
    ## 11      7      NA  6.9   74     5  11
    ## 25     NA      66 16.6   57     5  25
    ## 26     NA     266 14.9   58     5  26
    ## 27     NA      NA  8.0   57     5  27
    ## 32     NA     286  8.6   78     6   1
    ## 33     NA     287  9.7   74     6   2
    ## 34     NA     242 16.1   67     6   3
    ## 35     NA     186  9.2   84     6   4
    ## 36     NA     220  8.6   85     6   5
    ## 37     NA     264 14.3   79     6   6
    ## 39     NA     273  6.9   87     6   8
    ## 42     NA     259 10.9   93     6  11
    ## 43     NA     250  9.2   92     6  12
    ## 45     NA     332 13.8   80     6  14
    ## 46     NA     322 11.5   79     6  15
    ## 52     NA     150  6.3   77     6  21
    ## 53     NA      59  1.7   76     6  22
    ## 54     NA      91  4.6   76     6  23
    ## 55     NA     250  6.3   76     6  24
    ## 56     NA     135  8.0   75     6  25
    ## 57     NA     127  8.0   78     6  26
    ## 58     NA      47 10.3   73     6  27
    ## 59     NA      98 11.5   80     6  28
    ## 60     NA      31 14.9   77     6  29
    ## 61     NA     138  8.0   83     6  30
    ## 65     NA     101 10.9   84     7   4
    ## 72     NA     139  8.6   82     7  11
    ## 75     NA     291 14.9   91     7  14
    ## 83     NA     258  9.7   81     7  22
    ## 84     NA     295 11.5   82     7  23
    ## 96     78      NA  6.9   86     8   4
    ## 97     35      NA  7.4   85     8   5
    ## 98     66      NA  4.6   87     8   6
    ## 102    NA     222  8.6   92     8  10
    ## 103    NA     137 11.5   86     8  11
    ## 107    NA      64 11.5   79     8  15
    ## 115    NA     255 12.6   75     8  23
    ## 119    NA     153  5.7   88     8  27
    ## 150    NA     145 13.2   77     9  27
  • Menghapus missing value

    airquality_clean <- na.omit(airquality)
    head(airquality_clean)
    ##   Ozone Solar.R Wind Temp Month Day
    ## 1    41     190  7.4   67     5   1
    ## 2    36     118  8.0   72     5   2
    ## 3    12     149 12.6   74     5   3
    ## 4    18     313 11.5   62     5   4
    ## 7    23     299  8.6   65     5   7
    ## 8    19      99 13.8   59     5   8
  • Mengganti missing dengan nilai rata-rata

    airquality$Ozone[is.na(airquality$Ozone)] <- mean(airquality$Ozone, na.rm = TRUE)
    airquality$Solar.R[is.na(airquality$Solar.R)] <- mean(airquality$Solar.R, na.rm = TRUE)
    #na.rm = TRUE digunakan agar perhitungan rata-rata pada setiap variabel tidak mengikutsertakan row dengan missing value

Kategorisasi nilai

Pada kasus ini akan dilakukan kategorisasi/pengelompokkan nilai berdasarkan rentang nilai tertentu menjadi kategori tertentu. Pada kasus ini akan digunakan dataset mtcars. Kategorisasi dapat dilakukan dengan beberapa cara berikut

data(mtcars)
head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
  • menggunakan fungsi cut

    kategorisasi dilakukan dengan syarat berikut

    • “Low” for cars with mpg less than or equal to 20

    • “Medium” for cars with mpg between 20 and 30

    • “High” for cars with mpg greater than 30

    mtcars$mpg_category <- cut(mtcars$mpg, 
                               breaks = c(-Inf, 20, 30, Inf), 
                               labels = c("Low", "Medium", "High"))
    head(mtcars[, c("mpg", "mpg_category")])
    ##                    mpg mpg_category
    ## Mazda RX4         21.0       Medium
    ## Mazda RX4 Wag     21.0       Medium
    ## Datsun 710        22.8       Medium
    ## Hornet 4 Drive    21.4       Medium
    ## Hornet Sportabout 18.7          Low
    ## Valiant           18.1          Low
  • menggunakan fungsi mutate pada libary dplyr

    library(dplyr)
    ## Warning: package 'dplyr' was built under R version 4.3.3
    ## 
    ## Attaching package: 'dplyr'
    ## The following objects are masked from 'package:stats':
    ## 
    ##     filter, lag
    ## The following objects are masked from 'package:base':
    ## 
    ##     intersect, setdiff, setequal, union
    mtcars <- mutate(mtcars, mpg_category2 = case_when(mpg <= 20 ~ "Low",mpg > 20 & mpg <= 30 ~ "Medium",mpg > 30 ~ "High"))
    head(mtcars[, c("mpg", "mpg_category", "mpg_category2")])
    ##                    mpg mpg_category mpg_category2
    ## Mazda RX4         21.0       Medium        Medium
    ## Mazda RX4 Wag     21.0       Medium        Medium
    ## Datsun 710        22.8       Medium        Medium
    ## Hornet 4 Drive    21.4       Medium        Medium
    ## Hornet Sportabout 18.7          Low           Low
    ## Valiant           18.1          Low           Low
    #gunakan pipe operator "%>%" untuk mempermudah readability
    mtcars <- mtcars %>%
      mutate(mpg_category2 = case_when(
        mpg <= 20 ~ "Low",
        mpg > 20 & mpg <= 30 ~ "Medium",
        mpg > 30 ~ "High"
      ))
    head(mtcars[, c("mpg", "mpg_category", "mpg_category2")])
    ##                    mpg mpg_category mpg_category2
    ## Mazda RX4         21.0       Medium        Medium
    ## Mazda RX4 Wag     21.0       Medium        Medium
    ## Datsun 710        22.8       Medium        Medium
    ## Hornet 4 Drive    21.4       Medium        Medium
    ## Hornet Sportabout 18.7          Low           Low
    ## Valiant           18.1          Low           Low

Knit R Markdown

Knit dilakukan untuk mengubah dokumen R Markdown menjadi beberapa format seperti PDF, HTML, dan lain-lain. Untuk melakukan knit